// package语句：声明当前类所在的包路径，就像文件存放在文件夹中一样
// com.itheima.extends3modifier 表示当前类在 extends3modifier 包中
package com.itheima.extends3modifier;

// import语句：导入其他包中的类，让当前类可以使用这些类
// 这里导入了 com.itheima.extends2modifier 包中的 Fu 类
// 注意：Demo类和Fu类位于不同的包中！
import com.itheima.extends2modifier.Fu;

// public class：定义一个公共的类，名为Demo
// public表示这个类可以被任何地方的代码访问
public class Demo {
    // public static void main(String[] args)：程序的入口方法
    // public表示公共访问权限，static表示静态方法（属于类而非对象）
    // void表示方法没有返回值，main是方法名，String[] args是方法参数
    public static void main(String[] args) {
        // 创建Fu类的对象，变量名是fu
        // 虽然Demo和Fu在不同包中，但因为Fu类是public的，所以可以被访问
        Fu fu = new Fu();
        
        // 这行被注释掉了，因为：
        // privateMethod()是Fu类中用private修饰的方法
        // private修饰的成员只能在自己的类中访问，其他类（即使同包）都不能访问
        // fu.privateMethod();
        
        // 这行被注释掉了，因为：
        // method()是Fu类中没有访问修饰符的方法（默认/缺省修饰符）
        // 默认修饰符的成员只能在同一个包中访问
        // 而Demo类和Fu类在不同的包中，所以不能访问
        // fu.method();
        
        // 这行被注释掉了，因为：
        // protectedMethod()是Fu类中用protected修饰的方法
        // protected修饰的成员可以在自己的类中、同一个包中、以及子类中访问
        // 但是Demo类和Fu类既不在同一个包中，Demo类也不是Fu类的子类
        // 所以在不同包且非子类的情况下，protected成员也不能被访问
        // fu.protectedMethod();
        
        // 这行代码可以正常执行，因为：
        // publicMethod()是Fu类中用public修饰的方法
        // public修饰的成员可以被任何地方的代码访问，无论是否在同一个包中
        // 所以即使Demo类和Fu类在不同的包中，也可以访问public方法
        fu.publicMethod();
    }
}
